package modelo

import exepciones.SinDineroException
import java.util.ArrayList
import java.util.List
import org.uqbar.commons.utils.Observable

@Observable
class Jugador{
	@Property int monedero=100
	@Property Jardin jardin
	@Property String nombre="no tengo EAEA"
	@Property Zombie zombieSeleccionado
	@Property Planta plantaSeleccionada
	@Property Mejora mejoraSeleccionado
	@Property Sistema sistemaBase
	@Property Terreno filaSeleccionada
	@Property List<Planta> jardinZenTierra = new ArrayList<Planta>
	@Property List<Planta> jardinZenAgua = new ArrayList<Planta>
	@Property Observer obs= new Observer
	//metodo que filtre entre ambos jardines 
	
	new() {
		sistemaBase = new Sistema(this)
		jardin= new Jardin
		obs.jugador=this		
		//testeo
		
		plantaSeleccionada=jardinZenTierra.get(0)
		filaSeleccionada=jardin.filas.get(0)
		this.plantarUnaPlanta
		plantaSeleccionada=jardinZenTierra.get(1)
		filaSeleccionada=jardin.filas.get(0)
		this.plantarUnaPlanta
		plantaSeleccionada=jardinZenTierra.get(0)
		filaSeleccionada=jardin.filas.get(1)
		this.plantarUnaPlanta
		plantaSeleccionada=jardinZenTierra.get(0)
		filaSeleccionada=jardin.filas.get(1)
		this.plantarUnaPlanta
	}

	def tomaOro(int i) {
		monedero = monedero + i
	}

	def tomaUnaPlanta() {
		sistemaBase.daleUnaPlantaPremioA(this)
	}

	def agregaPlantaTerrestre(Planta planta) {
		if(!jardinZenTierra.contains(planta)) jardinZenTierra.add(planta)
	}

	def agregaPlantaAquatica(Planta planta) {
		if(!jardinZenAgua.contains(planta)) jardinZenAgua.add(planta)
	}

	def tomaOro(Integer integer) {
		monedero = monedero + integer
	}

	def plantarUnaPlanta() {
		plantaSeleccionada.plantateEn(jardin, filaSeleccionada)
	}
	def Zombie devolvemeElZombieDeNombre(String nombreZom){
		var unZombie = new Zombie
		var zombies=sistemaBase.zombiesDisponibles
		 for (Zombie zombieA : zombies) { 
    		  if(zombieA.nombre == nombreZom)
  				 unZombie=zombieA
  				} 
  				
  	   return unZombie
	}

	def mejorar() {
		if (mejoraSeleccionado.precio > monedero)
			throw new SinDineroException
		else {
			mejoraSeleccionado.mejorar(plantaSeleccionada)
			this.setMonedero(mejoraSeleccionado.precio)
		}
	}
	def desplanta(Planta planta){
		filaSeleccionada.elimina(planta)
		
	}
	
	def void primerAtaque(){
		atacar(zombieSeleccionado.clonate)
	}
	
	def void atacar(Zombie zombie) {
		zombie.atacar(filaSeleccionada, obs)		
	}

}
